Skip to content

Latest commit

 

History

History
444 lines (363 loc) · 9.59 KB

Expression User Manual.rst

File metadata and controls

444 lines (363 loc) · 9.59 KB

Expression 使用手册

buildin Function映射表

mysql中支持内置函数,内置函数在词法分析阶段就会被解析成特定的终结符类型,下面给出内置函数到终结符类型的映射关系表。

函数名 终结符 类型
ADDDATE builtinAddDate
BIT_AND builtinBitAnd
BIT_OR builtinBitOr
BIT_XOR builtinBitXor
CAST builtinCast
COUNT builtinCount
CURDATE builtinCurDate
CURTIME builtinCurTime
DATE_ADD builtinDateAdd
DATE_SUB builtinDateSub
EXTRACT builtinExtract
GROUP_CONCAT builtinGroupConcat
MAX builtinMax
MID builtinSubstring
MIN builtinMin
NOW builtinNow
POSITION builtinPosition
SESSION_USER builtinUser
STD builtinStddevPop
STDDEV builtinStddevPop
STDDEV_POP builtinStddevPop
STDDEV_SAMP builtinStddevSamp
SUBDATE builtinSubDate
SUBSTR builtinSubstring
SUBSTRING builtinSubstring
SUM builtinSum
SYSDATE builtinSysDate
SYSTEM_USER builtinUser
TRIM builtinTrim
VARIANCE builtinVarPop
VAR_POP builtinVarPop
VAR_SAMP builtinVarSamp
%token  <ident>

pipes "||"

singleAtIdentifier "identifier with single leading at"

doubleAtIdentifier "identifier with double leading at"

binaryType "BINARY"

%token <item>

assignmentEq ":="

/* The following tokens belong to ReservedKeyword. Notice: make sure these tokens are contained in ReservedKeyword. */ falseKwd "FALSE" trueKwd "TRUE"

/* The following tokens belong to UnReservedKeyword. Notice: make sure these tokens are contained in UnReservedKeyword. */ pipesAsOr weightString "WEIGHT_STRING"

/* The following tokens belong to TiDBKeyword. Notice: make sure these tokens are contained in TiDBKeyword. */ builtinAddDate builtinBitAnd builtinBitOr builtinBitXor builtinCast builtinCount builtinCurDate builtinCurTime builtinDateAdd builtinDateSub builtinExtract builtinGroupConcat builtinMax builtinMin builtinNow builtinPosition builtinSubDate builtinSubstring builtinSum builtinSysDate builtinStddevPop builtinStddevSamp builtinTrim builtinUser builtinVarPop builtinVarSamp

%token <item>

jss "->" juss "->>"

%%

Expression:

singleAtIdentifier assignmentEq Expression

  Expression logOr Expression
  Expression "XOR" Expression
  Expression logAnd Expression
  "NOT" Expression
  BoolPri IsOrNotOp trueKwd
  BoolPri IsOrNotOp falseKwd
  BoolPri
BitExpr:

BitExpr '|' BitExpr

  BitExpr '&' BitExpr
  BitExpr "<<" BitExpr
  BitExpr ">>" BitExpr
  BitExpr '+' BitExpr
  BitExpr '-' BitExpr
  BitExpr '*' BitExpr
  BitExpr '/' BitExpr
  BitExpr '%' BitExpr
  BitExpr "DIV" BitExpr
  BitExpr "MOD" BitExpr
  BitExpr '^' BitExpr
  SimpleExpr
SimpleExpr:

SimpleIdent

  FunctionCallKeyword
  FunctionCallNonKeyword
  FunctionCallGeneric
  Literal
  SumExpr
  '!' SimpleExpr
  '~' SimpleExpr
  '-' SimpleExpr
  '+' SimpleExpr
  SimpleExpr pipes SimpleExpr
  not2 SimpleExpr
  SubSelect
  '(' Expression ')'
  '(' ExpressionList ',' Expression ')'
  "ROW" '(' ExpressionList ',' Expression ')'
  "EXISTS" SubSelect
  "BINARY" SimpleExpr
  builtinCast '(' Expression "AS" CastType ')'
  "CASE" ExpressionOpt WhenClauseList ElseOpt "END"
  "CONVERT" '(' Expression ',' CastType ')'
SimpleIdent:

Identifier

  Identifier '.' Identifier
  '.' Identifier '.' Identifier
BoolPri:

BoolPri IsOrNotOp "NULL"

  BoolPri CompareOp PredicateExpr
  BoolPri CompareOp AnyOrAll SubSelect
  PredicateExpr
PredicateExpr:

BitExpr InOrNotOp '(' ExpressionList ')'

  BitExpr InOrNotOp SubSelect
  BitExpr BetweenOrNotOp BitExpr "AND" PredicateExpr
  BitExpr LikeOrNotOp SimpleExpr LikeEscapeOpt
  BitExpr RegexpOrNotOp SimpleExpr
  BitExpr
InOrNotOp:

"IN"

  "NOT" "IN"
ExpressionList:

Expression

  ExpressionList ',' Expression

//FulltextSearchModifierOpt: // /* empty */

ColumnNameList:

ColumnName

  ColumnNameList ',' ColumnName
ColumnName:

Identifier

  Identifier '.' Identifier
IsOrNotOp:

"IS"

  "IS" "NOT"
BetweenOrNotOp:

"BETWEEN"

  "NOT" "BETWEEN"
LikeOrNotOp:

"LIKE"

  "NOT" "LIKE"
LikeEscapeOpt:

/* empty */

  "ESCAPE" stringLit
RegexpOrNotOp:

RegexpSym

  "NOT" RegexpSym
RegexpSym:

"REGEXP"

  "RLIKE"
logOr:

pipesAsOr

  "OR"
CompareOp:

">="

  '>'
  "<="
  '<'
  "!="
  "<>"
  "="
  "<=>" // NullEQ
AnyOrAll:

"ANY"

  "SOME"
  "ALL"
SubSelect:

'(' SelectStmt ')' // please see DQL

  '(' SetOprStmt ')' // please see DQL
FunctionCallKeyword:

FunctionNameConflict '(' ExpressionListOpt ')'

  FunctionNameOptionalBraces OptionalBraces
  builtinCurDate '(' ')'
  FunctionNameDatetimePrecision FuncDatetimePrec
  "MOD" '(' BitExpr ',' BitExpr ')'
FunctionCallNonKeyword:

builtinCurTime '(' FuncDatetimePrecListOpt ')'

  builtinTrim '(' Expression ')'
  builtinTrim '(' Expression "FROM" Expression ')'
  builtinTrim '(' TrimDirection "FROM" Expression ')'
  builtinTrim '(' TrimDirection Expression "FROM" Expression ')'
FunctionCallGeneric:

identifier '(' ExpressionListOpt ')'

  Identifier '.' Identifier '(' ExpressionListOpt ')'
ExpressionListOpt:

/* empty */

  ExpressionList

FunctionNameConflict: | "IF"

FunctionNameOptionalBraces: | "CURRENT_DATE" | "UTC_DATE"

FunctionNameDatetimePrecision:

"CURRENT_TIME"

  "CURRENT_TIMESTAMP"
  "UTC_TIME"
  "UTC_TIMESTAMP"
OptionalBraces:

/* empty */

  '(' ')'
FuncDatetimePrec:

/* empty */

  '(' ')'
  '(' intLit ')'
StringName:

stringLit

  Identifier
FuncDatetimePrecListOpt:

/* empty */

  FuncDatetimePrecList
FuncDatetimePrecList:

intLit

TableName:

Identifier

  Identifier '.' Identifier
SignedNum:

Int64Num

  '+' Int64Num
  '-' NUM
Int64Num:

NUM

NUM:

intLit

Literal:

"FALSE"

  "NULL"
  "TRUE"
  floatLit
  decLit
  intLit
  StringLiteral
  "UNDERSCORE_CHARSET" stringLit
  hexLit
  bitLit
StringLiteral:

stringLit

  StringLiteral stringLit
SumExpr:

"AVG" '(' BuggyDefaultFalseDistinctOpt Expression ')'

  builtinBitAnd '(' Expression ')'
  builtinBitAnd '(' "ALL" Expression ')'
  builtinBitOr '(' Expression ')'
  builtinBitOr '(' "ALL" Expression ')'
  builtinBitXor '(' Expression ')'
  builtinBitXor '(' "ALL" Expression ')'
  builtinCount '(' DistinctKwd ExpressionList ')'
  builtinCount '(' "ALL" Expression ')'
  builtinCount '(' Expression ')'
  builtinCount '(' '*' ')'
  builtinGroupConcat '(' BuggyDefaultFalseDistinctOpt ExpressionList OrderByOptional OptGConcatSeparator ')'
  builtinMax '(' BuggyDefaultFalseDistinctOpt Expression ')'
  builtinMin '(' BuggyDefaultFalseDistinctOpt Expression ')'
  builtinSum '(' BuggyDefaultFalseDistinctOpt Expression ')'
  builtinStddevPop '(' BuggyDefaultFalseDistinctOpt Expression ')'
  builtinStddevSamp '(' BuggyDefaultFalseDistinctOpt Expression ')'
  builtinVarPop '(' BuggyDefaultFalseDistinctOpt Expression ')'
  builtinVarSamp '(' BuggyDefaultFalseDistinctOpt Expression ')'
BuggyDefaultFalseDistinctOpt:

DefaultFalseDistinctOpt

  DistinctKwd "ALL"
DefaultFalseDistinctOpt:

/* empty */

  DistinctOpt
DistinctOpt:

"ALL"

  DistinctKwd
DistinctKwd:

"DISTINCT"

  "DISTINCTROW"
OrderByOptional:

/* empty */

  OrderBy
OrderBy:

"ORDER" "BY" ByList

OrderBy:

"ORDER" "BY" ByList

ByList:

ByItem

  ByList ',' ByItem
ByItem:

Expression Order

Order:

/* EMPTY */

  "ASC"
  "DESC"
OptGConcatSeparator:

/* empty */

  "SEPARATOR" stringLit
CastType:

"BINARY" OptFieldLen

  Char OptFieldLen OptBinary
  "DATE"
  "DATETIME" OptFieldLen
  "DECIMAL" FloatOpt
  "TIME" OptFieldLen
  "SIGNED" OptInteger
  "UNSIGNED" OptInteger

//| "JSON" | "DOUBLE" | "FLOAT" FloatOpt | "REAL"

OptFieldLen:

/* empty */

  FieldLen
FieldLen:

'(' LengthNum ')'

LengthNum:

NUM

NUM:

intLit

OptBinary:

/* empty */

FloatOpt:

/* empty */

  FieldLen
  Precision
Precision:

'(' LengthNum ',' LengthNum ')'

OptInteger:

/* empty */

  "INTEGER"
  "INT"
ExpressionOpt:

/* empty */

  Expression
WhenClauseList:

WhenClause

  WhenClauseList WhenClause
WhenClause:

"WHEN" Expression "THEN" Expression

ElseOpt:

/* empty */

  "ELSE" Expression